const list = [
  {
    level: 'L0',
    dataRangeList: ['2023-12-29', '2023-12-30'],
  },
  {
    level: 'L0',
    dataRangeList: ['2024-01-04', '2024-01-05', '2024-01-06'],
  },
  {
    level: 'L0',
    dataRangeList: ['2024-01-02'],
  },
  {
    level: 'L0',
    dataRangeList: ['2024-01-03'],
  },
  {
    level: 'L0',
    dataRangeList: ['2024-01-05'],
  },
  {
    level: 'L0',
    dataRangeList: ['2024-01-03', '2024-01-04'],
  },
  {
    level: 'L0',
    dataRangeList: ['2024-01-05', '2024-01-06'],
  },
];

const list2 = [
  { level: 'L0', height: 160, dataRangeList: ['2023-12-29', '2023-12-30'] },
  {
    level: 'L0',
    height: 160,
    dataRangeList: ['2024-01-04', '2024-01-05', '2024-01-06'],
  },
  { level: 'L0', height: 160, dataRangeList: ['2024-01-02'] },
  { level: 'L0', height: 180, dataRangeList: ['2024-01-03'] },
  { level: 'L1', height: 160, dataRangeList: ['2024-01-05'] },
  { level: 'L1', height: 120, dataRangeList: ['2024-01-03', '2024-01-04'] },
  { level: 'L2', height: 160, dataRangeList: ['2024-01-05', '2024-01-06'] },
];
const list22 = [
  {
    level: 'L0',
    maxHeight: 180,
    children: [
      { level: 'L0', height: 160, dataRangeList: ['2023-12-29', '2023-12-30'] },
      {
        level: 'L0',
        height: 160,
        dataRangeList: ['2024-01-04', '2024-01-05', '2024-01-06'],
      },
      { level: 'L0', height: 160, dataRangeList: ['2024-01-02'] },
      { level: 'L0', height: 180, dataRangeList: ['2024-01-03'] },
    ],
  },
  {
    level: 'L1',
    maxHeight: 160,
    children: [
      { level: 'L1', height: 160, dataRangeList: ['2024-01-05'] },
      { level: 'L1', height: 120, dataRangeList: ['2024-01-03', '2024-01-04'] },
    ],
  },
  {
    level: 'L2',
    maxHeight: 160,
    children: [{ level: 'L2', height: 160, dataRangeList: ['2024-01-05', '2024-01-06'] }],
  },
];

// function processList(list) {
//   let result = [];

//   list.forEach((item, index) => {
//     let newItem = { ...item };
//     let maxLevel = -1;

//     // 遍历前面的所有元素
//     for (let i = 0; i < index; i++) {
//       // 如果前面的元素的 dataRangeList 中包含当前元素的任何一个日期
//       if (list[i].dataRangeList.some((date) => item.dataRangeList.includes(date))) {
//         // 更新 maxLevel
//         maxLevel = Math.max(maxLevel, result[i].level);
//       }
//     }

//     // 如果 maxLevel 仍然是 -1，说明没有任何一个日期在前面的元素中出现过，所以 level 为 0
//     // 否则，level 为 maxLevel + 1
//     newItem.level = maxLevel === -1 ? 0 : maxLevel + 1;

//     result.push(newItem);
//   });

//   return result;
// }

function processList(list) {
  let result = [];

  list.forEach((item, index) => {
    let newItem = { ...item };
    let maxLevel = -1;

    // 遍历前面的所有元素
    for (let i = 0; i < index; i++) {
      // 如果前面的元素的 dataRangeList 中包含当前元素的任何一个日期
      if (list[i].dataRangeList.some((date) => item.dataRangeList.includes(date))) {
        // 更新 maxLevel
        maxLevel = Math.max(maxLevel, parseInt(result[i].level.slice(1)));
      }
    }

    // 如果 maxLevel 仍然是 -1，说明没有任何一个日期在前面的元素中出现过，所以 level 为 "L0"
    // 否则，level 为 "L" + (maxLevel + 1)
    newItem.level = maxLevel === -1 ? 'L0' : 'L' + (maxLevel + 1);

    result.push(newItem);
  });

  return result;
}

const list3 = processList(list);

function convertToMultiDimensionalArray(list) {
  return list.reduce((acc, item) => {
    const levelIndex = parseInt(item.level.slice(1));
    if (!acc[levelIndex]) {
      acc[levelIndex] = [];
    }
    acc[levelIndex].push(item);
    return acc;
  }, []);
}

function convertList(list) {
  let result = [];

  list.forEach((item) => {
    // 查找具有相同 level 的元素
    let levelItem = result.find((x) => x.level === item.level);

    if (levelItem) {
      // 如果找到了具有相同 level 的元素，那么将当前元素添加到 children 数组中，并更新 maxHeight
      levelItem.children.push(item);
      levelItem.maxHeight = Math.max(levelItem.maxHeight, item.height);
    } else {
      // 如果没有找到具有相同 level 的元素，那么创建一个新的元素，并将当前元素添加到 children 数组中
      result.push({
        level: item.level,
        maxHeight: item.height,
        children: [item],
      });
    }
  });

  return result;
}

// const multiDimensionalArray = convertToMultiDimensionalArray(list2);

// console.log(multiDimensionalArray);

// console.log(list3);

const list223 = convertList(list2);
console.log(list223);
